package com.redpack.redpost.util.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

import com.redpack.redpost.connection.RedpostConexion;
import com.redpack.redpost.util.to.*;

public class ReporteArriboDao {

	public static List getReporteArriboDinamico(String fecha_inicio,String fecha_fin,String fecha_registro,String nip,String nombre,String apellidos,String direccion_personal,String forma_pago,String fecha_arribo,
			String numero_orden,String guia_arribo,String guia_redpack,String descripcion_mercancia,String valor_declarado,String numero_de_paquetes,
			String peso_real,String peso_dimensional,String impuestos,String manejo,String envio,String cargos_adicionales,String total_pagado,
			String estatus,String fecha_de_estatus,String dias_en_bodega,String fecha_de_pago,String puntos_utilizados,String puntos_pendientes) throws Exception {
		Connection conn = RedpostConexion.openConnection( ) ;
		conn.setAutoCommit( false ) ;
		PreparedStatement ps = null ;
		ResultSet rs = null ;
		List _ReporteArribo = new ArrayList(); 
		String sql = "" ;
		
		try{			
			sql = "select a.*,u.nombre as usern,u.apellidos as userap,u.fp as forma_pago,u.email,u.tel_casa,u.tel_oficina,u.tel_movil,CONCAT ( u.calle,' ',u.num_exterior )as direccion_personal from redpost.tbl_arribo as a left outer join redpost.tbl_usuarioredpost as u on u.nip=a.nip where u.nip like '%"+nip+"%' and u.nombre like '%"+nombre+"%' ";
			sql += " and u.fp like '%"+forma_pago+"%' ";
			
			if( fecha_inicio != null && !fecha_inicio.equals("") )
				sql += " and a.fecha_arribo>=cast('"+fecha_inicio+"' as date) ";
			
			if( fecha_fin != null && !fecha_fin.equals("") )
				sql += " and a.fecha_arribo<=cast('"+fecha_fin+"' as date) ";
			
//			if( numero_orden != null && !numero_orden.equals("") )
//				sql += " and a.num_orden="+numero_orden+" ";
			
//			if( peso_real != null && !peso_real.equals("") )
//				sql += " and a.peso_real_kg="+peso_real+" ";
			
//			if( peso_dimensional != null && !peso_dimensional.equals("") )
//				sql += " and a.peso_volumetrico_total_kg="+peso_dimensional+" ";
			
//			if( impuestos != null && !impuestos.equals("") )
//				sql += " and a.impuestos_total="+impuestos+" ";
			
//			if( manejo != null && !manejo.equals("") )
//				sql += " and a.manejo_total="+manejo+" ";
			
//			if( envio != null && !envio.equals("") )
//				sql += " and a.envio_entrega_total="+envio+" ";
			
//			if( cargos_adicionales != null && !cargos_adicionales.equals("") )
//				sql += " and a.cargos_adicionales_total="+cargos_adicionales+" ";
			
//			if( total_pagado != null && !total_pagado.equals("") )
//				sql += " and a.total_pagado="+total_pagado+" ";
			
			if( estatus != null && !estatus.equals("") )
				sql += " and a.status="+estatus+" ";
			
//			if( dias_en_bodega != null && !dias_en_bodega.equals("") )
//				sql += " and a.almacenaje_total="+dias_en_bodega+" ";
			
			System.out.print(sql);
			ps = conn.prepareStatement( sql ) ;
			rs = ps.executeQuery();
			DecimalFormat fmt = new DecimalFormat("###,###,###.##");
			
			while (rs.next()) {
				ReporteArriboToR row = new ReporteArriboToR();
				
				row.setCve_arribo(rs.getInt("cve_arribo"));
				row.setValor_mercancia_usd(fmt.format(rs.getFloat("valor_mercancia_usd")));
			    row.setStatus(rs.getInt("status"));
				row.setForma_pago(rs.getString("forma_pago"));
				row.setNip(rs.getString("nip"));
				row.setNombre(rs.getString("usern"));
				row.setApellidos(rs.getString("userap"));
				row.setFecha_arribo(rs.getString("fecha_arribo"));
				row.setCve_guia_arribo(rs.getString("cve_guia_arribo"));
				row.setNum_paquetes(rs.getInt("num_paquetes"));
				row.setAlmacenaje_costo_total(fmt.format(rs.getFloat("almacenaje_costo_total")));
				row.setAlmacenaje_total(fmt.format(rs.getFloat("almacenaje_total")));
				row.setOtros(fmt.format(rs.getFloat("otros")));
				row.setManejo_total(fmt.format(rs.getFloat("manejo_total")));
				row.setSeguro_transporte_total(fmt.format(rs.getFloat("seguro_transporte_total")));
				row.setTotal_pagado(fmt.format(rs.getFloat("total_pagado")));
				row.setImpuestos_total(fmt.format(rs.getFloat("impuestos_total")));
				row.setDesc_mercancia(rs.getString("desc_mercancia"));
				row.setEmail(rs.getString("email"));
				row.setTelefono_casa(rs.getString("tel_casa"));
				row.setTelefono_oficiona(rs.getString("tel_oficina"));
				row.setTelefono_movil(rs.getString("tel_movil"));
				row.setDireccion_personal(rs.getString("direccion_personal"));
				row.setNum_orden(rs.getInt("num_orden"));
				row.setCve_guia_redpack(rs.getString("cve_guia_redpack"));
//				row.setServicio(rs.getInt("servicio"));
//				row.setTipo_conv_captura(rs.getInt("tipo_conv_captura"));
				row.setPeso_real_total_kg(fmt.format(rs.getFloat("peso_real_total_kg")));
//				row.setPeso_real_total_lb(rs.getFloat("peso_real_total_lb"));
				row.setPeso_volumetrico_total_kg(fmt.format(rs.getFloat("peso_volumetrico_total_kg")));
//				row.setPeso_volumetrico_total_lb(rs.getFloat("peso_volumetrico_total_lb"));
				row.setEnvio_entrega_total(fmt.format(rs.getFloat("envio_entrega_total")));
				row.setCargos_adicionales_total(fmt.format(rs.getFloat("cargos_adicionales_total")));
//				row.setDevolucion(rs.getInt("devolucion"));
//				row.setFlete_devolucion(rs.getFloat("flete_devolucion"));
//				row.setTarifa_especial_val_merc(rs.getFloat("tarifa_especial_val_merc"));
//				row.setAplicar_puntos_rec(rs.getInt("aplicar_puntos_rec"));
//				row.setCve_direccion_alterna(rs.getInt("cve_direccion_alterna"));
//				row.setActivo(rs.getInt("activo"));
//				row.setTarifa_devolucion(rs.getFloat("tarifa_devolucion"));
				
				_ReporteArribo.add( row );
			}
			
			conn.commit( ) ;
			ps.close( ) ;
			conn.close( ) ;
			
			return _ReporteArribo ;
			
		}catch ( Exception e ) {
			e.printStackTrace( ) ;
			return _ReporteArribo = null ;
		} finally {
	        if (conn != null) {
	            conn.close();
	        }
			
		}
	}
	
	public static List getReporteArriboDireccion(String fecha_inicio,String fecha_final,String nip,int status) throws Exception {
		Connection conn = RedpostConexion.openConnection( ) ;
		conn.setAutoCommit( false ) ;
		PreparedStatement ps = null ;
		ResultSet rs = null ;
		List _ReporteArribo = new ArrayList(); 
		String sql = "" ;
		try{			
			
			sql += "select AR.cve_arribo as claveArribo, AD.* from redpost.tbl_arribo AR ";
			sql += "inner join redpost.tbl_estatus_arribo EA on EA.cve_estatus_arribo = AR.status ";
			sql += "inner join redpost.tbl_direccion_arribo as AD on AD.cve_arribo=AR.cve_arribo ";
			sql += "where AR.status = EA.cve_estatus_arribo";
			
			
			if(fecha_inicio != "" && fecha_final != ""){
				sql += " and AR.fecha_arribo >= '"+ fecha_inicio +"' and AR.fecha_arribo <= '"+ fecha_final +"' ";
			}
			if(fecha_inicio == "" && fecha_final != ""){
				sql += " and AR.fecha_arribo = '"+ fecha_final +"' ";
			}
			if(fecha_inicio != "" && fecha_final == ""){
				sql += " and AR.fecha_arribo = '"+ fecha_inicio +"' ";
			}
			if(status > 0 ){
				sql += " and AR.status = " + status;
			}
			if(nip != "" && nip != null){
					sql += " and AR.nip = '"+ nip +"' ";
			}
			
			System.out.print("Exportar Direcciones: "+sql);
			
			ps = conn.prepareStatement( sql ) ;
			rs = ps.executeQuery();

			
			while (rs.next()) {
				direccionArriboTo row = new direccionArriboTo();
				
				row.setCve_direccion_arrbio(rs.getInt("claveArribo"));
				row.setCve_arrbio(rs.getInt("cve_arribo"));
				row.setNip(rs.getString("nip"));
				row.setCalle(rs.getString("calle"));
				row.setNum_ext(rs.getString("num_ext"));
				row.setNum_int(rs.getString("num_int"));
				row.setReferencias(rs.getString("referencias"));
				row.setColonia(rs.getString("colonia"));
				row.setCp(rs.getInt("cp"));
				row.setEstado(rs.getString("estado"));
				row.setCiudad(rs.getString("ciudad"));
				row.setEmail(rs.getString("email"));
				row.setTelefono_casa(rs.getString("telefono_casa"));
				row.setTelefono_oficina(rs.getString("telefono_oficina"));
				row.setTelefono_movil(rs.getString("telefono_movil"));
				row.setConsignado(rs.getString("consignado"));
				row.setDelegacion(rs.getString("delegacion"));
				
				_ReporteArribo.add( row );
			}
			
			conn.commit( ) ;
			ps.close( ) ;
			conn.close( ) ;
			
			return _ReporteArribo ;
			
		}catch ( Exception e ) {
			e.printStackTrace( ) ;
			return _ReporteArribo = null ;
		} finally {
	        if (conn != null) {
	            conn.close();
	        }
			
		}

	}
	
	public static List getReporteArribo(String fecha_inicio,String fecha_final,String nip,int status) throws Exception {
		
		Connection conn = RedpostConexion.openConnection( ) ;
		conn.setAutoCommit( false ) ;
		PreparedStatement ps = null ;
		ResultSet rs = null ;
		List _ReporteArribo = new ArrayList(); 
		String sql = "" ;
		
		try{			
			//sql = "select * from redpost.tbl_estatus_arribo;";
			sql += "select EA.descripcion as descripcion_status,* from redpost.tbl_arribo AR  ";
			sql += "inner join redpost.tbl_estatus_arribo EA on EA.cve_estatus_arribo = AR.status  ";
			sql += "where AR.status = EA.cve_estatus_arribo";
			
			
			if(fecha_inicio != "" && fecha_final != ""){
				sql += " and AR.fecha_arribo >= '"+ fecha_inicio +"' and AR.fecha_arribo <= '"+ fecha_final +"' ";
			}
			if(fecha_inicio == "" && fecha_final != ""){
				sql += " and AR.fecha_arribo = '"+ fecha_final +"' ";
			}
			if(fecha_inicio != "" && fecha_final == ""){
				sql += " and AR.fecha_arribo = '"+ fecha_inicio +"' ";
			}
			if(status > 0 ){
				sql += " and AR.status = " + status;
			}
			if(nip != "" && nip != null){
					sql += " and AR.nip = '"+ nip +"' ";
			}
			
			
			
			ps = conn.prepareStatement( sql ) ;
			rs = ps.executeQuery();

			
			while (rs.next()) {
				ReporteArriboTo row = new ReporteArriboTo();
				
				row.setDescripcion_status(rs.getString("descripcion_status"));
		
				row.setValor_mercancia_usd(rs.getFloat("valor_mercancia_usd"));
			    row.setStatus(rs.getInt("status"));
				row.setCve_arribo(rs.getInt("cve_arribo"));
				row.setNip(rs.getString("nip"));
				row.setServicio(rs.getInt("servicio"));
				row.setFecha_arribo(rs.getString("fecha_arribo"));
				row.setCve_guia_arribo(rs.getString("cve_guia_arribo"));
				row.setNum_paquetes(rs.getInt("num_paquetes"));
				
				row.setDesc_mercancia(rs.getString("desc_mercancia"));
				
				row.setTipo_conv_captura(rs.getInt("tipo_conv_captura"));
				row.setPeso_real_total_kg(rs.getFloat("peso_real_total_kg"));
				row.setPeso_real_total_lb(rs.getFloat("peso_real_total_lb"));
				row.setPeso_volumetrico_total_kg(rs.getFloat("peso_volumetrico_total_kg"));
				row.setPeso_volumetrico_total_lb(rs.getFloat("peso_volumetrico_total_lb"));
				row.setImpuestos_total(rs.getFloat("impuestos_total"));
				row.setEnvio_entrega_total(rs.getFloat("envio_entrega_total"));
				row.setManejo_total(rs.getFloat("manejo_total"));
				row.setSeguro_transporte_total(rs.getFloat("seguro_transporte_total"));
				row.setCargos_adicionales_total(rs.getFloat("cargos_adicionales_total"));
				row.setDevolucion(rs.getInt("devolucion"));
				row.setFlete_devolucion(rs.getFloat("flete_devolucion"));
				row.setAlmacenaje_costo_total(rs.getFloat("almacenaje_costo_total"));
				row.setAlmacenaje_total(rs.getFloat("almacenaje_total"));
				row.setOtros(rs.getFloat("otros"));
				row.setTarifa_especial_val_merc(rs.getFloat("tarifa_especial_val_merc"));
				row.setTotal_pagado(rs.getFloat("total_pagado"));
				row.setAplicar_puntos_rec(rs.getInt("aplicar_puntos_rec"));
				row.setCve_direccion_alterna(rs.getInt("cve_direccion_alterna"));
				row.setActivo(rs.getInt("activo"));
				row.setTarifa_devolucion(rs.getFloat("tarifa_devolucion"));
				
				row.setCve_guia_redpack(rs.getString("cve_guia_redpack"));
				
				_ReporteArribo.add( row );
			}
			
			conn.commit( ) ;
			ps.close( ) ;
			conn.close( ) ;
			
			return _ReporteArribo ;
			
		}catch ( Exception e ) {
			e.printStackTrace( ) ;
			return _ReporteArribo = null ;
		} finally {
	        if (conn != null) {
	            conn.close();
	        }
			
		}
	}	
	
}
